package com.tanovo.service;

import com.tanovo.bo.OauthClientDetailsBo;
import com.tanovo.bo.TokenRequest;
import com.tanovo.bo.UserCore;
import com.tanovo.domain.ClientMapUser;
import com.tanovo.domain.CompanyMapUser;
import com.tanovo.domain.OauthClientDetails;

import java.util.List;

public interface IOauthClientDetailsService {
    /**
     * 获取tokenclient
     *
     * @param tokenRequest
     * @return
     */
    OauthClientDetails getOauthClientDetails(TokenRequest tokenRequest);

    /**
     * 添加客户端
     *
     * @param oauthClientDetails
     */
    void addClient(OauthClientDetails oauthClientDetails);

    void deleteCient(OauthClientDetails oauthClientDetails);

    void updateCient(OauthClientDetails oauthClientDetails);

    List<OauthClientDetails> getCompanyCientList(OauthClientDetails oauthClientDetails);

    /**
     * 判断client 有没有开通
     *
     * @param clientId
     */
    Boolean openFlag(String clientId);

    void deleteCientIdList(List<Integer> idList);

    /**
     * 判断用户是否存在 clientid
     *
     * @return
     */
    List<ClientMapUser> getUserClientList(Integer userId, Integer companyId, String clientId);

    /**
     * 超级管理员绑定 客户端
     */
    void bindSuperadmin(OauthClientDetailsBo oauthClientDetails);

    /**
     * 添加客户端及相关权限等
     *
     * @param oauthClientDetails
     */
    void addClientAndData(OauthClientDetailsBo oauthClientDetails);

    /**
     * 给应用初始化角色资源
     *
     * @param oauthClientDetails
     */
    void initClientAdminRole(OauthClientDetails oauthClientDetails);

    /**
     * 当前登录人绑定到应用
     *
     * @param clientDetailsBo
     */
    void bindUserToClient(OauthClientDetailsBo clientDetailsBo);

    /**
     * 当前用户能登录的应用
     *
     * @param userId
     * @param companyId
     * @return
     */
    List<OauthClientDetails> getCurrentCientList(Integer userId, Integer companyId);

    /**
     * 获取首页的应用列表
     *
     * @return
     */
    List<OauthClientDetails> getIndexClientList();

    /**
     * 用户提交应用申请
     *
     * @param user
     */
    void openClientSubmit(UserCore user);
}
